/**
 *  vector_3d.inl
 *  AwkwardEngine - Math
 *
 *  Date: 19/08/2013
 *
 *  Language: C++
 *
 *  @author Carl McCaffrey
 *
 */
#ifndef VECTOR_3D_INL
#define VECTOR_3D_INL

inline bool cVecEqual3D(cVec vec1, cVec vec2)
{
	if((vec1.x == vec2.x) && (vec1.y == vec2.y) && (vec1.z == vec2.z)){
		return true;
	}else{
		return false;
	}
}

inline bool cVecGreater3D(cVec vec1, cVec vec2)
{
	if((vec1.x > vec2.x) && (vec1.y > vec2.y) && (vec1.z > vec2.z)){
		return true;
	}else{
		return false;
	}
}

inline bool cVecGreaterEqual3D(cVec vec1, cVec vec2)
{
	if((vec1.x >= vec2.x) && (vec1.y >= vec2.y) && (vec1.z >= vec2.z)){
		return true;
	}else{
		return false;
	}
}

inline bool cVecLess3D(cVec vec1, cVec vec2)
{
	if((vec1.x < vec2.x) && (vec1.y < vec2.y) && (vec1.z < vec2.z)){
		return true;
	}else{
		return false;
	}
}

inline bool cVecLessEqual3D(cVec vec1, cVec vec2)
{
	if((vec1.x <= vec2.x) && (vec1.y <= vec2.y) && (vec1.z <= vec2.z)){
		return true;
	}else{
		return false;
	}
}

inline float cVecDot3D(cVec vec1, cVec vec2)
{
	float x = vec1.x * vec2.x;
	float y = vec1.y * vec2.y;
	float z = vec1.z * vec2.z;

	return (x + y + z);
}

inline float cVecMagnitude3D(cVec vec)
{
	return cMathSqrt((vec.x * vec.x) + (vec.y * vec.y) + (vec.z * vec.z));
}

inline cVec cVecNormalize3D(cVec vec)
{
	cVec vec1;
	float mag = cVecMagnitude3D(vec);
	
	vec1.x = vec.x / mag;
	vec1.y = vec.y / mag;
	vec1.z = vec.z / mag;
	vec1.w = vec.w;

	return vec1;
}

#endif // VECTOR_3D_INL